🔹 Dominio (domain)

El dominio es el núcleo de la aplicación en la arquitectura hexagonal. Aquí se definen las reglas de negocio puras sin depender de frameworks ni infraestructura.

1️⃣ Entidad (Avion)

📌 Descripción:

📜 Justificación:

🔷 Papel en la arquitectura hexagonal/microservicios:
✅ Forma parte del núcleo del dominio en la arquitectura hexagonal.
No depende de infraestructura ni frameworks, garantizando flexibilidad.
✅ En microservicios, permite la separación clara de responsabilidades.


2️⃣ Repositorio (AvionRepository)

📌 Descripción:

📜 Justificación:

🔷 Papel en la arquitectura hexagonal/microservicios:
Es un puerto de salida, permitiendo cambiar la implementación sin afectar el dominio.
✅ Permite que la persistencia sea un detalle de infraestructura desacoplado del negocio.
✅ Facilita pruebas unitarias al poder inyectar implementaciones simuladas.


3️⃣ Servicio de Dominio (AvionDomainService)

📌 Descripción:

📜 Justificación:

🔷 Papel en la arquitectura hexagonal/microservicios:
✅ Es un servicio puro del dominio, manteniéndose independiente de infraestructura.
✅ Facilita la modularización, permitiendo reutilizar la lógica en diferentes casos de uso.
✅ En microservicios, permite migrar lógica fácilmente entre servicios.


🔹 Aplicación (application)

Orquesta los casos de uso, sin implementar lógica de dominio ni detalles de infraestructura.

4️⃣ Caso de Uso (RegisterAvionUseCase)

📌 Descripción:

📜 Justificación:

🔷 Papel en la arquitectura hexagonal/microservicios:
✅ Es un puerto de entrada, permitiendo diferentes maneras de ejecutar la lógica.
✅ Desacopla la lógica de negocio de la exposición (REST, eventos, etc.).
✅ En microservicios, facilita la reutilización de lógica en distintas interfaces.


5️⃣ DTO (AvionDTO)

📌 Descripción:

📜 Justificación:

🔷 Papel en la arquitectura hexagonal/microservicios:
Actúa como un contrato de datos, evitando acoplar clientes al dominio.
✅ Facilita compatibilidad entre microservicios, reduciendo cambios en el contrato.
Optimiza la serialización y la transferencia de datos.


6️⃣ Mapper (AvionMapper)

📌 Descripción:

📜 Justificación:

🔷 Papel en la arquitectura hexagonal/microservicios:
Transforma datos entre capas, siguiendo el principio de separación de responsabilidades.
Minimiza cambios en la API cuando cambia el modelo interno.
✅ En microservicios, facilita la interoperabilidad entre sistemas.


🔹 Infraestructura (infrastructure)

Implementa adaptadores que conectan la aplicación con persistencia, eventos y APIs externas.

8️⃣ Repositorio JPA (JpaAvionRepository)

📌 Descripción:

📜 Justificación:

🔷 Papel en la arquitectura hexagonal/microservicios:
Es un adaptador de salida, implementando un puerto de la arquitectura hexagonal.
✅ Permite que microservicios usen diferentes bases de datos sin cambiar el código del dominio.


🔟 Adaptador de API externa (ExternalFlightApiAdapter)

📌 Descripción:

📜 Justificación:

🔷 Papel en la arquitectura hexagonal/microservicios:
Es un puerto de salida, asegurando flexibilidad en la comunicación con terceros.
✅ Facilita la integración desacoplada entre microservicios.


🔹 Eventos (events)

Gestionan comunicación asincrónica entre componentes o microservicios.

1️⃣2️⃣ Publicador de Evento (EventPublisher)

📌 Descripción:

📜 Justificación:

🔷 Papel en la arquitectura hexagonal/microservicios:
Es un puerto de salida, desacoplando la lógica de la mensajería.
✅ Facilita arquitecturas event-driven en microservicios.


🔹 API (api)

Expone la aplicación a clientes externos.

1️⃣4️⃣ Controlador REST (AvionController)

📌 Descripción:

📜 Justificación:

🔷 Papel en la arquitectura hexagonal/microservicios:
Es un puerto de entrada, permitiendo diversas interfaces sin modificar el dominio.

 

 

🔹 Eventos (events)

1️⃣2️⃣ Publicador de Evento (EventPublisher)

📌 Descripción:

📜 Justificación:
Desacoplamiento → Permite que servicios se comuniquen sin llamadas directas.
🔹 Si no se tiene en cuenta: Los microservicios estarían fuertemente acoplados, dificultando escalabilidad y mantenibilidad.

Escalabilidad → Facilita procesamiento asíncrono y arquitectura reactiva.
🔹 Si no se tiene en cuenta: El sistema podría volverse lento si todas las operaciones fueran síncronas.

Alta disponibilidad → Evita bloqueos al procesar eventos en segundo plano.
🔹 Si no se tiene en cuenta: Si un servicio falla, las solicitudes podrían perderse en lugar de ser procesadas más tarde.

🔷 Papel en la arquitectura hexagonal/microservicios:
✅ Actúa como puerto de salida, permitiendo interacción con sistemas externos sin acoplarse directamente.
✅ En microservicios, habilita un modelo event-driven, donde los servicios reaccionan a eventos en lugar de depender de llamadas directas.
✅ Permite la integración con diferentes plataformas sin modificar el dominio.


1️⃣3️⃣ Evento de Dominio (AvionRegisteredEvent)

📌 Descripción:

📜 Justificación:
Consistencia eventual → Permite que otros sistemas procesen el evento sin impactar la operación principal.
🔹 Si no se tiene en cuenta: Todos los sistemas tendrían que actualizarse en la misma transacción, afectando el rendimiento.

Facilita la trazabilidad → Permite registrar y auditar los cambios en el sistema.
🔹 Si no se tiene en cuenta: No habría un mecanismo claro para seguir la actividad de los aviones registrados.

Reactividad → Otros servicios pueden reaccionar sin modificar el código base.
🔹 Si no se tiene en cuenta: Sería necesario modificar el código de cada servicio que necesita esta información, afectando la modularidad.

🔷 Papel en la arquitectura hexagonal/microservicios:
✅ Representa un evento de dominio, clave en arquitecturas event-driven.
✅ En microservicios, facilita la comunicación asíncrona entre servicios, evitando dependencias directas.
✅ Puede ser publicado por EventPublisher y consumido por AvionEventListener.


1️⃣4️⃣ Escuchador de Eventos (AvionEventListener)

📌 Descripción:

📜 Justificación:
Desacoplamiento → Los servicios que reaccionan a eventos no dependen directamente del servicio que los genera.
🔹 Si no se tiene en cuenta: Sería necesario modificar el servicio principal cada vez que un nuevo proceso necesite reaccionar al evento.

Escalabilidad → Permite que múltiples consumidores procesen eventos en paralelo.
🔹 Si no se tiene en cuenta: Todo el procesamiento recaería en un solo servicio, limitando el rendimiento.

Flexibilidad → Permite añadir nuevas funcionalidades sin tocar la lógica central.
🔹 Si no se tiene en cuenta: Cada nueva funcionalidad tendría que implementarse dentro del servicio principal, reduciendo la modularidad.

🔷 Papel en la arquitectura hexagonal/microservicios:
✅ Actúa como adaptador de entrada, permitiendo que el sistema reaccione a eventos sin acoplamiento directo.
✅ En una arquitectura event-driven, facilita el procesamiento distribuido y asincrónico.
✅ Permite integrar nuevas funcionalidades sin modificar el servicio de registro de aviones.